deployment/apim-policies/Refreshes the access token.xml (53 lines of code) (raw):
<policies>
<inbound>
<base />
<set-backend-service base-url="{{identityServerBaseUrl}}" />
<rewrite-uri template="/connect/token" />
<set-header name="Content-Type" exists-action="override">
<value>application/x-www-form-urlencoded</value>
</set-header>
<set-body>@{
var requestBody = context.Request.Body.As<JObject>(preserveContent: true);
var refreshToken = requestBody["refreshToken"];
return $"grant_type=refresh_token&refresh_token={refreshToken}&client_id={{clientId}}";
}</set-body>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
<choose>
<when condition="@(context.Response.StatusCode == 200)">
<set-body>@{
var refreshTokenResponseObject = context.Response.Body.As<JObject>(preserveContent: true);
return new JObject(
new JProperty("token",
new JObject(
new JProperty("accessToken", refreshTokenResponseObject["access_token"]),
new JProperty("refreshToken", refreshTokenResponseObject["refresh_token"]),
new JProperty("expiresIn", refreshTokenResponseObject["expires_in"])
))
).ToString();
}</set-body>
</when>
</choose>
</outbound>
<on-error>
<return-response>
<set-status code="@(context.Response.StatusCode)" reason="@(context.Response.StatusReason)" />
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body>@{
return new JObject(
new JProperty("errorCode", context.Response.StatusCode.ToString()),
new JProperty("errors", new JArray(new JObject(
new JProperty("errorTarget", context.LastError.Reason),
new JProperty("description", context.LastError.Message))))
).ToString();
}</set-body>
</return-response>
<base />
</on-error>
</policies>